package in.co.codedoc.json.mapper;

import in.co.codedoc.cg.annotations.IsAJSONMapper;
import in.co.codedoc.json.JSONDecoderMethod;
import in.co.codedoc.json.JSONEncoderMethod;
import in.co.codedoc.json.JSONLongValue;
import in.co.codedoc.json.JSONObjectValue;
import in.co.codedoc.time.Time;

@IsAJSONMapper
public class TimeJSONMapper
{
	@JSONEncoderMethod
	public static JSONObjectValue Encode(Time time)
	{
		JSONObjectValue json = new JSONObjectValue();
	
		if(time != null)
		{
			json.SetProperty("hh", new JSONLongValue(time.GetHours()));
			json.SetProperty("mm", new JSONLongValue(time.GetMinutes()));
			json.SetProperty("ss", new JSONLongValue(time.GetSeconds()));
		}
		
		return json;
	}
	
	@JSONDecoderMethod
	public static Time Decode(JSONObjectValue json)
	{
		return json == null || !json.HasProperty("hh") || !json.HasProperty("mm") || !json.HasProperty("ss")
		?
			null
		:
			new Time
			(
				(int)((JSONLongValue)json.GetProperty("hh")).GetValue(),
				(int)((JSONLongValue)json.GetProperty("mm")).GetValue(),
				(int)((JSONLongValue)json.GetProperty("ss")).GetValue()
			);
	}	
}
